// 引入axios
import axios from 'axios'

import router from '@/router'

// 引入vuex仓库 store
import store from '@/store'

// 创建自定义axios
const instance = axios.create({
  baseURL: 'http://toutiao.itheima.net',
  timeout: 5000
})

// 添加请求拦截器
instance.interceptors.request.use(
  function(config) {
    const token = store.state.user.token.token
    // 在发送请求之前做些什么
    // 好多请求是需要在请求头中携带token信息到服务器的,这样会导致代码很麻烦,可以通过axios来统一配置token的处理
    // token存在的时候,才携带token
    if (token) {
      config.headers.Authorization = `Bearer ${token}`
    }
    return config
  },
  function(error) {
    // 对请求错误做些什么
    return Promise.reject(error)
  }
)

// 添加响应拦截器
instance.interceptors.response.use(
  function(response) {
    // 对响应数据做点什么
    // 响应的数据可以少写一层data
    return response.data
  },
  function(error) {
    // 处理token过期问题
    // 判断响应状态码 如果为401,token过期,需要跳转到login页面重新登录
    console.log(error.response)
    if (error.response.status === 401) {
      // 1. 清除过期的token值
      store.commit('user/removeLocalStorageToken')
      // 2. 跳转到登录页面重新登录
      router.push('/login')
    }
    // 对响应错误做点什么
    return Promise.reject(error)
  }
)

// 导出
export default instance
